-- KEYS[1] = 库存 key （例如 "stock:product_1001"）
-- KEYS[2] = 用户购买记录 key （例如 "user_purchases:product_1001"）
-- ARGV[1] = 用户ID

local stockKey = KEYS[1]
local purchaseHashKey = KEYS[2]
local userId = ARGV[1]

-- 获取当前库存
local stock = tonumber(redis.call('GET', stockKey))
if stock == nil then
    return -1 -- 库存不存在
elseif stock <= 0 then
    return 0 -- 库存不足
end

-- 获取用户已购买的数量
local purchasedCount = tonumber(redis.call('HGET', purchaseHashKey, userId)) or 0

-- 判断是否已超过限购数量（每人最多买5件）
if purchasedCount >= 5 then
    return -2 -- 用户已达限购上限
end

-- 扣减库存 + 更新用户购买数量
local ok = redis.call('DECR', stockKey)
if not ok then
    return -3 -- 扣减库存失败（理论上不会发生）
end

redis.call('HINCRBY', purchaseHashKey, userId, 1)

-- 再次获取库存
stock = tonumber(redis.call('GET', stockKey))
if stock == 0 then
    -- 如果库存为 0，设置一个短 TTL（例如 5 分钟）
    redis.call('EXPIRE', stockKey, 300)
    redis.call('EXPIRE', purchaseHashKey, 300)
end

return 1 -- 成功